﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Diagnostics;
using System.Data;
using System.Windows.Forms;
using System.Data.OleDb;

namespace Connect
{
    public class Excel
    { 
        // Đường dẫn tới file Excel
        string DuongDanExcel="";
        // Chuỗi kết nối kết nối đến file Excel
        string ChuoiKetNoiExcel = "";
        // Bảng Dữ Liệu Excel (DataTable)
        DataTable BangExcel;
        // Bảng dữ liệu SQL (DataTable)
        DataTable BangSQL;

        public Excel(string DuongDanExcel)
        {
            this.DuongDanExcel=DuongDanExcel;
            if (DuongDanExcel.ToLower().EndsWith(".xls")==true)
            {
                //MessageBox.Show("Office 2003");
                ChuoiKetNoiExcel = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + DuongDanExcel + ";Extended Properties='Excel 8.0;HDR=YES;IMEX=1'";
            }
            if (DuongDanExcel.ToLower().EndsWith(".xlsx")==true)
            {
                //MessageBox.Show("Office 2007");     
                ChuoiKetNoiExcel = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" + DuongDanExcel + ";Extended Properties='Excel 12.0;HDR=YES;IMEX=1'";
            }
            if (DuongDanExcel.ToLower().EndsWith(".xlsm")==true)
            {
                //MessageBox.Show("Office 2010");    
                ChuoiKetNoiExcel = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + DuongDanExcel + ";Extended Properties='Excel 8.0;HDR=YES;IMEX=1'";
            }
        }
        #region Tắt tất cả các ứng dụng trên máy tính của bạn
        public static void TatTatCa(string ChuongTrinh)
        {
            Process damhchay = null;
            Process[] chayca = null;
            chayca = Process.GetProcessesByName(ChuongTrinh);
            foreach (Process damhchay_loopVariable in chayca)
            {
                damhchay = damhchay_loopVariable;
                damhchay.CloseMainWindow();
                damhchay.Kill();
            }
        }
        #endregion

        #region Tắt ứng dụng đầu tiên trên máy tính của bạn
        public static void TatDauTien(string ChuongTrinh)
        {
            try
            {
                Process[] pProcess = null;
                pProcess = System.Diagnostics.Process.GetProcessesByName(ChuongTrinh);
                pProcess[0].Kill();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion

        #region Tắt ứng dụng cuoi cung trên máy tính của bạn
        public static void TatCuoiCung(string ChuongTrinh)
        {
            try
            {
                Process[] pProcess = null;
                pProcess = Process.GetProcesses();
                int i = 0;
                for (i = 0; i <= pProcess.Length - 1; i++)
                {
                    if ((pProcess[i].ProcessName.ToLower().Equals(ChuongTrinh) == true))
                    {
                        pProcess[i].Kill();

                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion

        #region Tách ký tự số và chữ trong chuối
        /// <summary>
        /// Tách ký tự số trong chuỗi C1B2C3 => 123
        /// </summary>
        /// <param name="chuoi">Chuối ký tự hỗn hợp cần tách</param>
        /// <returns></returns>
        public static string TachSo(string chuoi)
        {
            chuoi.Replace("+", "").Replace(" ", "").Replace("e","");
            string strLetter = "";
            string strDigit = "";
            int length = chuoi.Length;
            if ("" != chuoi)
            {
                for (int i = 0; i < length; i++)
                {
                    if (!Char.IsDigit(chuoi[i]))
                        strLetter += chuoi[i];
                    else
                        strDigit += chuoi[i];
                }
            }
            return strDigit;

        }
        /// <summary>
        /// Tách ký tự chữ trong chuỗi C1B2C3 => CBC
        /// </summary>
        /// <param name="chuoi">Chuối ký tự hỗn hợp cần tách</param>
        /// <returns></returns>
        public static string TachChu(string chuoi)
        {
            string strLetter = "";
            string strDigit = "";
            int length = chuoi.Length;
            if ("" != chuoi)
            {
                for (int i = 0; i < length; i++)
                {
                    if (!Char.IsDigit(chuoi[i]))
                        strLetter += chuoi[i];
                    else
                        strDigit += chuoi[i];
                }
            }
            return strLetter;

        }
        #endregion

        #region Lấy ra danh sách các Sheet
        public DataTable Sheet()
        {
            System.Data.DataTable dtSheets = null;

            using (OleDbConnection oledbConn = new OleDbConnection(ChuoiKetNoiExcel))
            {
                try
                {
                    oledbConn.Open();

                    //Trả về các sheet có trong file excel
                    dtSheets = oledbConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
                }
                catch (Exception exc)
                {
                    throw new Exception(exc.Message);
                }
                finally
                {
                    if (oledbConn != null)
                        oledbConn.Close();
                }
            }

            System.Data.DataTable temp = new System.Data.DataTable();
            temp.Columns.Add("TABLE_NAME", typeof(string));
            for (int i = 0; i < dtSheets.Rows.Count; i++)
            {
                // temp.Rows.Add(new Object[] {i,dtSheets.Rows[i]["TABLE_NAME"].ToString().Replace('$',' ').Trim()});
                temp.Rows.Add(dtSheets.Rows[i]["TABLE_NAME"].ToString().Replace('$', ' ').Replace((char)39, ' ').Trim().ToString());
            }
            return temp;
        }
        #endregion

        #region Bảng dữ liệu Excel
        public DataTable ExcelTable(string Sheet)
        {
            using (OleDbConnection connection = new OleDbConnection(ChuoiKetNoiExcel))
            {
                connection.Open();
                using (OleDbDataAdapter adapter = new OleDbDataAdapter())
                {
                    DataTable dataTable = new DataTable();
                    adapter.SelectCommand = new OleDbCommand("SELECT * FROM [" + Sheet+ "$]", connection);
                    adapter.Fill(dataTable);
                    //for (int i = 0; i < dataTable.Rows.Count; i++)
                    //{
                    //    DataRow row = BangDuLieu.NewRow();
                    //    row[0] = i + 1;
                    //    row[1] = temp.ThongTin(dataTable.Rows[i][0].ToString(), dataTable.Rows[i][1].ToString());
                    //    row[2] = "1414";
                    //    BangDuLieu.Rows.Add(row);
                    //}
                    BangExcel = dataTable;
                    return dataTable;
                }
                connection.Close();
            }
        }
        #endregion

        #region Các bảng trong cơ sở dữ liệu
        /// <summary>
        /// Trả về danh sách các bảng trong csdl : name | type ...
        /// </summary>
        /// <returns></returns>
        public static DataTable ListTableSQL()
        {
            return Connect.cnSQL.ExecQuery("SELECT * FROM sys.Tables where name<>'sysdiagrams'");
        }
        #endregion

        #region Các trường trong bảng cơ sở dữ liệu
        /// <summary>
        /// Danh sách các trường column_name,data_type , CHARacter_maximum_length
        /// </summary>
        /// <param name="TableName"></param>
        /// <returns></returns>
        public static DataTable TruongSQL(string TableName)
        {
            return Connect.cnSQL.ExecQuery("SELECT column_name ,data_type,CHARacter_maximum_length, is_nullable FROM information_schema.columns WHERE table_name = '" + TableName.Trim() + "'");
        }
        #endregion

        #region DataTable chứa các trường của bảng
        /// <summary>
        /// DataTable chứa các trường của bảng
        /// </summary>
        /// <param name="tbn">DataTable nguồn để lấy tiêu đề</param>
        /// <param name="dongbatdau">Dòng bắt đầu lấy dữ liệu</param>
        /// <param name="dich">DataGridView đổ lên</param>
        public static void TruongDuLieuExcel(System.Data.DataTable BangNguon, DataGridView GridView)
        {
            #region Tạo các trường bằng mã
            //System.Windows.Forms.DataGridViewCheckBoxColumn Chon = new System.Windows.Forms.DataGridViewCheckBoxColumn();     
            //dich.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {Chon});

            //    // 
            //    // Chon
            //    // 
            //   Chon.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells;
            //   Chon.HeaderText = "   ";
            //   Chon.Name = "Chon";
            //   Chon.Width = 5;
            #endregion
            if (BangNguon == null)
            {
                return;
            }
            System.Data.DataTable dtNew = new System.Data.DataTable();
            dtNew.Columns.Add("Excel");
            try
            {
                for (int k = 0; k < BangNguon.Columns.Count; k++)
                {
                    DataRow r = dtNew.NewRow();
                    r["Excel"] = BangNguon.Columns[k].ColumnName.ToString();
                    dtNew.Rows.Add(r);
                }
            }
            catch (Exception)
            {
                GridView.DataSource = dtNew;
                GridView.Columns["Excel"].ReadOnly = false;
                GridView.Columns["Excel"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
                return;
            }

            GridView.DataSource = dtNew;
            GridView.Columns["Excel"].ReadOnly = false;
            GridView.Columns["Excel"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;

        }
        #endregion

        /// <summary>
        /// Sinh mã tự động theo một quy ước
        /// </summary>
        /// <param name="DauNgu">Ký tự chữ</param>
        /// <param name="Bangcansinhma">DataTable chữa mã</param>
        /// <param name="format">Định dạng mã VD :  "00000"</param>
        /// <returns></returns>
        public static string Sinh(string DauNgu, System.Data.DataTable Bangcansinhma, String format)
        {
            int DauNgulength = DauNgu.Length;
            int thutu = 0;
            foreach (System.Data.DataRow row in Bangcansinhma.Rows)
            {
                try
                {
                    if (int.Parse(((row[0].ToString().Remove(DauNgulength) == DauNgu) ?
                        row[0].ToString().
                        Substring(DauNgulength) : "")) != thutu + 1)
                    {
                        break;
                    }
                    thutu = int.Parse(row[0].ToString().Substring(DauNgulength));
                }
                catch (FormatException) { };
            }
            thutu += 1;
            return (DauNgu + thutu.ToString(format));
        }

    }
}
